package com.autotest.nore.controller;

import com.autotest.nore.common.exception.TokenEmptyException;
import com.autotest.nore.dto.ModuleDTO;
import com.autotest.nore.dto.ModuleListDTO;
import com.autotest.nore.service.ModuleService;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import jakarta.servlet.http.HttpServletRequest;
import java.util.List;


@RestController
@RequestMapping("/autotest/module")
public class ModuleController {

    @Autowired
    private ModuleService moduleService;

    @PostMapping("/updateApiModule")
    public void updateApiModule(@RequestBody ModuleDTO moduleDTO){
        String id=moduleDTO.getId();
        String name=moduleDTO.getName();
        String mockPrefix=moduleDTO.getMockPrefix();
        moduleService.updateApiModule(id,name,mockPrefix);
    }
    @PostMapping("/updateCaseModule")
    public void updateCaseModule(@RequestBody ModuleDTO moduleDTO){
        String id=moduleDTO.getId();
        String name=moduleDTO.getName();
        moduleService.updateCaseModule(id,name);
    }
    @PostMapping("/updateCollectionModule")
    public void updateCollectionModule(@RequestBody ModuleDTO moduleDTO){
        String id=moduleDTO.getId();
        String name=moduleDTO.getName();
        moduleService.updateCollectionModule(id,name);
    }

    @PostMapping("/saveCaseModule")
    public ModuleDTO save(@RequestBody ModuleDTO moduleDTO, HttpServletRequest request) {
        HttpSession session = request.getSession(false); // 获取会话，如果不存在则返回null
        if (session == null || session.getAttribute("userName") == null) {
            throw new TokenEmptyException("用户未登录，请重新登录");
        }
        String userName = session.getAttribute("userName").toString();
        moduleDTO.setUpdateUser(userName);
        return moduleService.saveCaseModule(moduleDTO);
    }

    @PostMapping("/saveApiModule")
    public ModuleDTO saveApiModule(@RequestBody ModuleDTO moduleDTO, HttpServletRequest request) {
        HttpSession session = request.getSession(false); // 获取会话，如果不存在则返回null
        if (session == null || session.getAttribute("userName") == null) {
            throw new TokenEmptyException("用户未登录，请重新登录");
        }
        String userName = session.getAttribute("userName").toString();
        String parentId = moduleDTO.getParentId();
//        if ("0".equals(parentId) && !"系统管理员".equals(userName)){
//            throw new RuntimeException("一级目录添加请联系管理员");
//        }
        moduleDTO.setUpdateUser(userName);
        return moduleService.saveApiModule(moduleDTO);
    }

    @PostMapping("/saveCollectionModule")
    public ModuleDTO saveCollectionModule(@RequestBody ModuleDTO moduleDTO, HttpServletRequest request) {
        HttpSession session = request.getSession(false); // 获取会话，如果不存在则返回null
        if (session == null || session.getAttribute("userName") == null) {
            throw new TokenEmptyException("用户未登录，请重新登录");
        }
        String userName = session.getAttribute("userName").toString();
        moduleDTO.setUpdateUser(userName);
        return moduleService.saveCollectionModule(moduleDTO);
    }


    @PostMapping("/deleteApi")
    public void deleteApi(@RequestBody ModuleDTO moduleDTO) {
        moduleService.deleteApi(moduleDTO);
    }

    @GetMapping("/deleteCase/{moduleId}")
    public void deleteCase(@PathVariable String moduleId) {
        moduleService.deleteCase(moduleId);
    }

    @GetMapping("/list/{moduleType}/{projectId}")
    public List<ModuleListDTO> getModuleList(@PathVariable String moduleType, @PathVariable String projectId) {
        return moduleService.getModuleList(moduleType, projectId);
    }

    @GetMapping("/list/collection/{projectId}")
    public List<ModuleListDTO> getCollectionModuleList(@PathVariable String projectId) {
        return moduleService.getCollectionModuleList(projectId);
    }


    @GetMapping("/list/api/{projectId}/all")
    public List<ModuleListDTO> getAllModuleList(@PathVariable String projectId){
        return moduleService.getModulesByProjectId(projectId);
    }


}
